package done.easy_701_800;

import lombok.NoArgsConstructor;
import org.junit.Test;

import static com.study.util.LogUtil.info;

/**
 * 703. Kth Largest Element in a Stream 数据流中的第K大元素
 * <p>
 * 设计一个找到数据流中第K大元素的类（class）。注意是排序后的第K
 * 大元素，不是第K个不同的元素。
 * 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的
 * 构造器，它包含数据流中的初始元素。每次调用 KthLargest.add，
 * 返回当前数据流中第K大的元素。
 *
 * @author 大硕
 * 2019-04-12 11:38 PM
 **/
@SuppressWarnings("all")
@NoArgsConstructor
public class KthLargestElementInAStream {

    class KthLargest {
        public KthLargest(int k, int[] nums) {
            // TODO
        }

        public int add(int val) {
            // 190413 first
            return -1;
        }
    }

    @Test
    public void test() {
        int k = 3;
        int[] arr = new int[]{4, 2, 8, 5};
        KthLargest kthLargest = new KthLargest(3, arr);
        info("4 -> {}", kthLargest.add(3));   // returns 4
        info("5 -> {}", kthLargest.add(5));   // returns 5
        info("5 -> {}", kthLargest.add(10));  // returns 5
        info("8 -> {}", kthLargest.add(9));   // returns 8
        info("8 -> {}", kthLargest.add(4));   // returns 8
    }
}















































/*
private Queue<Integer> queue;
private int k = 0;

public KthLargest(int k, int[] nums) {
    queue = new PriorityQueue(k);
    this.k = k;
    for (int i = 0; i < nums.length; i++) {
        add(nums[i]);
    }
}

public int add(int val) {
    if (queue.size() < k) {
        queue.offer(val);
    } else {
        if (queue.peek() < val) {
            queue.poll();
            queue.offer(val);
        }
    }
    return queue.peek();
}
*/
